package com.sskj.api.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sskj.api.domain.Device;
import com.sskj.api.vo.req.DeviceReq;
import com.sskj.common.dto.DeviceService;
import com.sskj.common.dto.DeviceProperty;
import com.sskj.common.vo.req.DeviceCommandReq;
import java.util.List;

public interface IDeviceService extends IService<Device> {

    /**
     * 新增
     * @param device 实例
     */
    void add(Device device);

    /**
     * 删除
     * @param id 主键ID
     */
    void deleteById(Long id);

    /**
     * 更新
     * @param device 实例
     */
    void update(Device device);

    /**
     * 详情
     * @param id 主键ID
     * @return 实例
     */
    Device detail(Long id);

    /**
     * 分页查询
     * @param req 请求实例
     * @return 分页集合
     */
    IPage<Device> pageList(DeviceReq req);

    /**
     * 获取设备属性信息
     * @param id 主键ID
     * @return 设备属性信息
     */
    List<DeviceProperty> getDeviceProperties(Long id);

    /**
     * 获取设备事件列表
     * @param id 主键ID
     * @return 设备事件列表
     */
    List<DeviceService> getDeviceServices(Long id);

    /**
     * 通过设备编码获取事件列表
     * @param deviceCode 设备CODE
     * @return 设备事件列表
     */
    List<DeviceService> getDeviceServices(String deviceCode);

    /**
     * 下发设备指令
     * @param req 下发指令信息
     * @return 透传信息
     */
    Object sendCommand(DeviceCommandReq req);

    /**
     * 播放视频
     * @param id 设备ID
     * @param channelNumber 通道
     * @param qualityType 分辨率类型
     * @return 流播放地址
     */
    String playVideo(Long id, Integer channelNumber, Integer qualityType);

    /**
     * 停止播放视频
     * @param id 设备ID
     * @param channelNumber 通道
     */
    void stopVideo(Long id, Integer channelNumber);

    /**
     * 停止播放视频
     * @param code 设备CODE
     * @param channel 通道
     */
    void stopVideo(String code, Integer channel);

    /**
     * 通过设备编码获取设备信息
     * @param code 设备编码
     * @return 设备信息
     */
    Device getByCode(String code);

    /**
     * 我的设备
     * @param userId 用户ID
     * @param pageNo 页码
     * @param pageSize 条数
     * @return 设备分页列表
     */
    IPage<Device> myDevices(Long userId, Long pageNo, Long pageSize);

    /**
     * 我的设备总数
     * @return 总数
     */
    Long myDevices(Long userId);
}
